import pygame
import random
SCREEN_RECT = pygame.Rect(0,0,480,700)
FRAME_INTERVAL = 10

class GameSprite(pygame.sprite.Sprite):
    '''游戏精灵类'''
    res_path = "./res/images/"
    def __init__(self , image_name,speed,*groups):
        '''
        构造方法
        :param image_name:要加载的图片文件名
        :param speed:移动速度,0表示静止
        :param groups:要添加到的精灵组,不传值不添加
        '''
        super().__init__(*groups)
        #图像
        self.image = pygame.image.load(self.res_path +image_name)
        self.rect = self.image.get_rect()           #矩形区域,默认在左上角
        self.speed  = speed                         #移动速度

    def update(self,*args):
        '''更新精灵位置.默认在垂直方向移动'''
        self.rect.y += self.speed

class Background(GameSprite):
    '''背景精灵类'''
    def __init__(self,is_alt,*groups):
        #调用父类方法实现精灵的创建
        super().__init__("background.png",1,*groups)
        #判断是否是另一个精灵，如果是 ，需要初始位置
        if is_alt:
            self.rect.y = -self.rect.h
    def update(self,*args):

        #调用父类的方法实现向下运动
        super().update(*args)
        #判断是否移出屏幕，如果移出屏幕，将图像设置到屏幕最上方
        if self.rect.y >= self.rect.h:
            self.rect.y = -self.rect.h



class StatusButton(GameSprite):
    '''状态按钮类'''
    def __init__(self,image_names,*groups):
        '''
        构造方法
        :param image_names:要加载的图像名称列表
        :param groups: 要添加的精灵组
        '''
        super().__init__(image_names[0],0,*groups)
        #加载图像
        self.images = [pygame.image.load(self.res_path + name )for name in image_names]


    def switch_status(self,is_pause):
        '''
        切换状态
        :param is_pause:是否暂停
        :return:
        '''
        self.image = self.images[1 if is_pause else 0]


class Label(pygame.sprite.Sprite):
    '''
    文本标签精灵类
    '''
    font_path = "./res/font/MarkerFelt.ttc"
    def __init__(self,text,size,color,*groups):
        '''
        构造方法
        :param text:文本内容
        :param size: 文本大小
        :param color: 字体颜色
        :param groups: 要添加的精灵组
        '''

        super().__init__(*groups)
        self.font = pygame.font.Font(self.font_path,size)
        self.color = color
        self.image = self.font.render(text,True,self.color)
        self.rect = self.image.get_rect()
    def set_text(self,text):
        '''
        设置文本，使用指定的文本重新渲染 ，并且更新rect
        :param text: 文本内容
        :return:
        '''
        self.image = self.font.render(text,True,self.color)
        self.rect  = self.image.get_rect()


class Plane(GameSprite):
    '''飞机类'''
    def __init__(self,normal_names,*groups):
        '''
        构造方法
        :param normal_names:记录正常飞行状态的图像名称列表
        :param groups:要添加到的精灵族
        '''
        super().__init__(normal_names[0],0,*groups)
        #加载图像列表
        self.normal_images = [pygame.image.load(self.res_path + name for  name in normal_names)]
        self.normal_index = 0
    def update(self,*args):
        #如果第一个参数为False,不需要更新图像，直接返回
        if not  args[0]:
            return

        #设置图像
        self.image = self.normal_images[self.normal_index]
        #更新索引
        count = len(self.normal_images)
        self.normal_index =(self.normal_index + 1 )% count
